package algo3.algothief.modelo;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;

public class JuegoEnCurso extends EstadoDelJuego {
	
	protected static String stringCaracteristico = "JuegoEnCurso";
	
//-------------------------------------------------------------------------------------
	
	public JuegoEnCurso(Juego juego) {
		super("Juego en curso.", juego);
	}

//-------------------------------------------------------------------------------------	
	
	protected String verStringCaracteristico() {
		return stringCaracteristico;
	}

//-------------------------------------------------------------------------------------
	
	public ArrayList<Pais> verHaciaQuePaisesSePuedeViajar() {
		return super.juego.verHaciaQuePaisesSePuedeViajar(this);
	}

	public HashMap<String, LugarDePais> verQueLugaresSePuedenVisitar() {
		return super.juego.verQueLugaresSePuedenVisitar(this);
	}

	public boolean modificarLaDescripcionDelSospechoso(HashMap<String, String> caracteristicasElegidasPorElJugador) {
		return super.juego.modificarLaDescripcionDelSospechoso(caracteristicasElegidasPorElJugador, this);
	}

	public boolean emitirOrdenDeArresto() {
		return super.juego.emitirOrdenDeArresto(this);
	}

	public boolean viajarA(Pais pais) throws ParserConfigurationException, SAXException, IOException {
		return super.juego.viajarA(pais, this);
	}

	public String visitar(LugarDePais lugar) {
		return super.juego.visitar(lugar, this);
	}

	public boolean verSiSePuedeSeguirJugando() {
		return true;
	}

	public EstadoDelJuego comprobarPosibleCambioDeEstadoACausaDelTiempo(Tiempo tiempo) {
		boolean seTerminoElTiempo = tiempo.llegoAlLimite();
		
		if (seTerminoElTiempo) 
			return new SeAcaboElTiempo(super.juego);
		
		return this;
	}

	public EstadoDelJuego modificarEstadoACausaDeLlegarAlUltimoPais() {
		return new SeLlegoAlUltimoPais(super.juego);
	}
	
	public EstadoDelJuego modificarEstadoACausaDeSalirDelUltimoPais() {
		return this;
	}

	public EstadoDelJuego modificarEstadoACausaDeEmitirOrdenDeArresto() {
		return new JuegoEnCursoConOrdenDeArresto(super.juego);
	}

	public EstadoDelJuego comprobarPosibleCambioDeEstadoAlVisitarUnLugar(Caso caso, CuartelGeneral cuartel, LugarDePais lugar) {
		return this;
	}
}
